package fr.channel.client.view.impl;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;

import fr.channel.client.view.ConnectionView;
import fr.channel.shared.dto.PartieDTO;
import com.google.gwt.user.client.ui.TextBox;

public class ConnectionViewImpl extends Composite implements ConnectionView {

	private static ConnectionViewImplUiBinder uiBinder = GWT.create(ConnectionViewImplUiBinder.class);

	private Presenter presenter;

	@UiField(provided = true)
	protected CellTable<PartieDTO> cellTable = new CellTable<PartieDTO>();
	@UiField TextBox partieName;
	@UiField TextBox joueurName;

	interface ConnectionViewImplUiBinder extends UiBinder<Widget, ConnectionViewImpl> {
	}

	public ConnectionViewImpl() {
		initWidget(uiBinder.createAndBindUi(this));
		TextColumn<PartieDTO> nameColumn = new TextColumn<PartieDTO>() {
			@Override
			public String getValue(final PartieDTO partie) {
				return partie.getName();
			}
		};
		TextColumn<PartieDTO> nbJoueursColumn = new TextColumn<PartieDTO>() {
			@Override
			public String getValue(final PartieDTO partie) {
				return String.valueOf(partie.getNombreJoueur());
			}
		};
		
		cellTable.addColumn(nameColumn, "Nom");
		cellTable.addColumn(nbJoueursColumn, "Nb joueurs");
	}

	public ConnectionViewImpl(final String firstName) {
		initWidget(uiBinder.createAndBindUi(this));
	}

	@UiHandler("createLink")
	final void onClick(final ClickEvent e) {
		presenter.createPartie(partieName.getText(), joueurName.getText());
	}

	@Override
	public final void setPresenter(final Presenter presenter) {
		this.presenter = presenter;
	}

	@Override
	public final void setParties(final List<PartieDTO> parties) {
		cellTable.setRowCount(parties.size(), true);
		cellTable.setRowData(0, parties);
	}

}
